"""
FastAPI应用配置
"""
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager

from server.routers import router
from server.middleware.auth_middleware import AuthMiddleware
from server.utils.common_utils import setup_logging
from server.mcp import setup_mcp_server

# 设置日志配置
setup_logging()


@asynccontextmanager
async def lifespan(app: FastAPI):
    """应用生命周期管理"""
    # 启动时初始化数据库
    from src.situation.database import init_db, ensure_table_exists, health_check
    from src.utils import logger

    try:
        logger.info("正在初始化 PostgreSQL 数据库...")
        await init_db()
        logger.info("PostgreSQL 数据库初始化完成")

        # 确保表存在
        logger.info("检查数据库表状态...")
        table_ok = await ensure_table_exists()
        if table_ok:
            logger.info("✅ 数据库表状态检查通过")
        else:
            logger.warning("⚠️ 数据库表状态检查失败，但应用将继续运行")

        # 执行健康检查
        health = await health_check()
        logger.info(f"📊 数据库健康状态: {health}")

    except Exception as e:
        logger.error(f"PostgreSQL 数据库初始化失败: {e}")
        logger.warning("⚠️ 数据库初始化失败，但应用将继续运行")

    yield

    # 关闭时清理资源
    logger.info("应用关闭，清理数据库连接...")
    try:
        # 可以在这里添加数据库连接池的清理代码
        logger.info("数据库连接清理完成")
    except Exception as e:
        logger.error(f"数据库连接清理失败: {e}")


def create_app() -> FastAPI:
    """创建FastAPI应用实例"""
    app = FastAPI(lifespan=lifespan)

    # 添加路由
    app.include_router(router, prefix="/api")

    # 添加中间件
    _add_middleware(app)

    # 设置MCP服务器
    setup_mcp_server(fastapi_app=app, api_base_url=None, api_key=None)  # 使用默认的API_BASE_URL  # 使用默认的API_KEY配置

    return app


def _add_middleware(app: FastAPI):
    """添加中间件"""
    # CORS 设置
    app.add_middleware(
        CORSMiddleware,
        allow_origins=["*"],
        allow_credentials=True,
        allow_methods=["*"],
        allow_headers=["*"],
    )

    # 添加鉴权中间件
    app.add_middleware(AuthMiddleware)